/*******************************************************************************
 * @(#)RoleDao.java 2019年01月10日 11:30
 * Copyright 2019 upbos.com. All rights reserved.
 *******************************************************************************/
package com.upbos.upm.role;

import com.upbos.data.core.SingleDao;
import com.upbos.upm.entity.Role;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <b>Application name：</b> RoleDao.java <br>
 * <b>Application describing： </b> <br>
 * <b>Copyright：</b> Copyright &copy; 2019 upbos.com 版权所有。<br>
 * <b>Company：</b> upbos.com <br>
 * <b>Date：</b> 2019年01月10日 11:30 <br>
 * <b>author：</b> <a href="mailto:wangjz@miyzh.com"> Jason </a> <br>
 * <b>version：</b>V5.0.0 <br>
 */
@Repository
public class RoleDao {
    @Resource
    private SingleDao singleDao;

    /**
     * 获取角色列表
     *
     * @return 角色列表
     */
    public List<Role> listRole(String orgId, String name) {
        Role role = new Role();
        role.setOrgId(orgId);
        role.setName(name);
        return singleDao.queryList("RoleDaoMapper.listRole", role);
    }

    /**
     * 插入角色
     *
     * @param role 角色
     */
    public void insertRole(Role role) {
        singleDao.insert(role);
    }

    /**
     * 更新角色
     *
     * @param role 角色
     */
    public void updateRole(Role role) {
        singleDao.updateById(role);
    }

    /**
     * 删除角色，且与功能模块以及与用户的关联关系
     *
     * @param roleId 角色Id
     */
    public void deleteRole(Integer roleId) {
        Role role = new Role();
        role.setId(roleId);
        // 删除角色
        singleDao.deleteById(role);
        // 删除与功能模块关联关系
        singleDao.delete("RoleDaoMapper.deleteRoleModule", roleId);
        // 删除与用户的关联关系
        singleDao.delete("RoleDaoMapper.deleteUserRole", roleId);
    }

    /**
     * 保存与功能模块的关联关系
     *
     * @param roleId    角色Id
     * @param moduleIds 功能模块Id集合
     */
    public void updateRoleModule(Integer roleId, List<String> moduleIds) {
        // 先删除与功能模块的关联关系
        singleDao.delete("RoleDaoMapper.deleteRoleModule", roleId);

        // 然后插入与功能模块的关联关系
        for (String moduleId : moduleIds) {
            Map<String, Object> map = new HashMap<String, Object>(2);
            map.put("roleId", roleId);
            map.put("resId", moduleId);
            singleDao.insert("RoleDaoMapper.insertRoleModule", map);
        }
    }

    /**
     * 获取角色对应的功能模块Id集合
     *
     * @param roleId 角色Id
     * @return 功能模块Id列表
     */
    public List<String> listRoleModule(Integer roleId) {
        return singleDao.queryList("RoleDaoMapper.listRoleModule", roleId);
    }

    /**
     * 根据角色名称查询角色列表
     *
     * @param name 角色名称
     * @return 角色列表
     */
    public List<Role> listRoleByName(String name) {
        return singleDao.queryList("RoleDaoMapper.listRoleByName", name);
    }
}